Python如何进行大数据分析?
人生苦短,快学Python!
大家应该都用Python进行过数据分析吧,Pandas简直就是数据处理的第一利器。但是不知道大家有没有试过百万级以上的数据,这时候再用Pandas处理就是相当的慢了。
那么对于大数据来说,应该用什么处理呢?
在公司的日常工作中,其实会使用Spark来进行大数据分析偏多。企业数据的分析始于读取、过滤和合并来自多个数据源的文件和数据流[1]。
Spark数据处理引擎是这方面的佼佼者,可处理各种量级的数据,其传输速度比Hadoop系统快100倍。得益于SQL的支持、直观的界面和简单的多语言API,你可轻松使用Spark,而不必学习复杂的新型生态系统。
对于Python爱好者来说PySpark则更为熟悉,我们可以通过调用Python API的方式来编写Spark程序,它支持了大多数的Spark功能,比如SparkDataFrame、Spark SQL、Streaming、MLlib等等。
关于PySpark与GraphFrames的安装与使用可以查看这篇博客:
https://xxmdmst.blog.csdn.net/article/details/123009617
下面我们通过一个小案例,来看看如果用PySpark求解问题[2]。
PySpark求解连通图问题
刘备和关羽有关系,说明他们是一个社区,刘备和张飞也有关系,那么刘备、关羽、张飞归为一个社区,以此类推。
对于这个连通图问题使用Pyspark如何解决呢?
首先,我们创建spark对象:
from pyspark.sql import SparkSession, Row
from graphframes import GraphFrame
spark = SparkSession \
.builder \
.appName("PySpark") \
.master("local[*]") \
.getOrCreate()
sc = spark.sparkContext
# 设置检查点目录
sc.setCheckpointDir("checkpoint")
然后构建数据:
data = [
['刘备', '关羽'],
['刘备', '张飞'],
['张飞', '诸葛亮'],
['曹操', '司马懿'],
['司马懿', '张辽'],
['曹操', '曹丕']
]
data = spark.createDataFrame(data, ["人员", "相关人员"])
data.show()
输出结果:
+------+--------+
| 人员|相关人员|
+------+--------+
| 刘备| 关羽|
| 刘备| 张飞|
| 张飞| 诸葛亮|
| 曹操| 司马懿|
|司马懿| 张辽|
| 曹操| 曹丕|
+------+--------+
很明显原始数据就是图计算所要求的边数据,只修改一下列名即可:
edges = data.toDF("src", "dst")
edges.printSchema()
输出结果:
root
|-- src: string (nullable = true)
|-- dst: string (nullable = true)
下面我们开始构建顶点数据:
vertices = (
edges.rdd.flatMap(lambda x: x)
.distinct()
.map(lambda x: Row(x))
.toDF(["id"])
)
vertices.show()
输出结果:
+------+
| id|
+------+
|诸葛亮|
| 刘备|
| 曹操|
|司马懿|
| 曹丕|
| 关羽|
| 张飞|
| 张辽|
+------+
下面使用spark的图计算 计算连通图:
g = GraphFrame(vertices, edges)
result = g.connectedComponents().orderBy("component")
result.show()
输出结果:
+------+------------+
| id| component|
+------+------------+
|司马懿| 0|
| 张辽| 0|
| 曹丕| 0|
| 曹操| 0|
| 关羽|635655159808|
| 刘备|635655159808|
| 张飞|635655159808|
|诸葛亮|635655159808|
+------+------------+
可以看到结果中已经顺利将一个社区的成员通过一个相同的component标识出来,成功解决需求。
作为数据从业者,工作越来越离不开Spark,而无论你使用Python、Scala或Java编程语言,实际上都可以调用Spark实现大数据分析的高效操作。
最近清华大学出版社出了一本《Spark实战(第2版)》将引导你创建端到端分析应用程序。在本书中,你可学习基于Java的有趣示例,包括用于处理NASA卫星数据的完整数据管道。
你还可查看托管在GitHub上的有关Java、Python和Scala的代码示例,并探索、修改此代码。此外,本书的附录为你提供速查表,帮助你安装工具和理解特定的Spark术语。
最后,我也会给关注快学Python的同学来波福利,还没有我好友的读者朋友,可以扫码加一下。
我会在朋友圈发起送出新书《Spark实战(第2版)》的抽奖活动,平时有其他动态也会第一时间在朋友圈通知。
参考资料
《Spark实战(第2版)》: http://product.dangdang.com/29391936.html
[2]PySpark求解连通图问题: https://blog.csdn.net/as604049322/article/details/123036398